#include <unistd.h>
#include <stdio.h>  
#include <pthread.h>  
#include <string.h>  
#include <sys/time.h>  

#define MAX 10  

pthread_t thread[2];  
pthread_mutex_t mut;  
int number=0, i;  
void *thread1()  
{  
        printf ("thread1 : I'm thread 1\n");  
        for (i = 0; i < MAX && number < MAX; i++)  
        {  
                printf("thread1 : number = %d\n",number);  
                pthread_mutex_lock(&mut);  
                        number++;  
                pthread_mutex_unlock(&mut);  
                sleep(2);  
        }  
        printf("thread1 :主函数在等我完成任务吗？\n");  
        pthread_exit(NULL);  
}  
void *thread2()  
{  
    char cmd[50];
    while (number < MAX) {
        scanf("%s", cmd);
        if(strcmp("q", cmd) == 0) {
            pthread_mutex_lock(&mut);
            number = MAX;
            pthread_mutex_unlock(&mut);
            break;
        }
        printf("thread2 : I'm thread 2 %s\n", cmd);  
    }    
    printf("thread2 :主函数在等我完成任务吗？\n");  
    pthread_exit(NULL);  
}  
void thread_create(void)  
{  
        int temp;  
        memset(&thread, 0, sizeof(thread));            
        /*创建线程*/  
        if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0)         
                printf("线程1创建失败!\n");  
        else  
                printf("线程1被创建\n");  
        if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0)    
                printf("线程2创建失败");  
        else  
                printf("线程2被创建\n");  
}  
void thread_wait(void)  
{  
        /*等待线程结束*/  
        if(thread[0] !=0) {                     
                pthread_join(thread[0],NULL);  
                printf("线程1已经结束\n");  
        }  
        if(thread[1] !=0) {                 
                pthread_join(thread[1],NULL);  
                printf("线程2已经结束\n");  
       }  
}  
int main()  
{  
        /*用默认属性初始化互斥锁*/  
        pthread_mutex_init(&mut,NULL);  
        printf("我是主函数哦，我正在创建线程，呵呵\n");  
        thread_create();  
        printf("我是主函数哦，我正在等待线程完成任务阿，呵呵\n");  
        thread_wait();  
        return 0;  
}  
